package ASAInstruction;

import ASAExpression.ASAExpr;
import application.FunctionStack;
import application.Memory;
import exceptions.ExecutionException;

/**
 * Classe représentant la déclaration d'une variable
 * @author O.Riad
 * @author D.Romain
 * 
 */
public class ASADeclarationVariable extends ASAInstruction{
    
    private String variable;
    private ASAExpr e1;
    
    /**
     * Constructeur de déclaration simple
     * @param var 
     */
    public ASADeclarationVariable(String var){
        this.variable = var;
        this.e1=null;
    }
    
    /**
     * Constructeur de déclarations avec affectation
     * @param var
     * @param affect 
     */
    public ASADeclarationVariable(String var, ASAExpr affect){
        this.variable = var;
        this.e1 = affect;
    }

    @Override
    public int execute() throws ExecutionException {
        
        if(this.e1 != null){
            Memory.add(FunctionStack.getExecCurrentFunction(), this.variable, this.e1.evalue());
        }else{
            Memory.add(FunctionStack.getExecCurrentFunction(), this.variable, null);
        }
        return 1;
    }

}
